智能硬件系统开发之语音通信
| 题目 | 智能硬件系统开发之语音通信 |
|---|---|
| 主要内容 | 学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket网络编程实现基于嵌入式 IP 网络的双向语音通信。 |
| 设计要求 | 基本要求: 1、在嵌入式系统环境下,实现本地语音文件录放(WAV格式); 2、通过 Socket 网络编程实现 IP 网络双向语音传输。 扩展要求:通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码,G.711、G.729等格式均可。也可以自行设计其它扩展功能。 |
| 主要仪器设备 | 1、嵌入式开发系统 1 套;2、计算机 1 台,安装Ubuntu操作系统及 arm-linux 交叉编译工具;3、耳麦 1 个;4、网线 2 根,IP 地址 2 个 |
linux下的嵌入式开发工具
串口调试
查看串口:ls -l /dev/tty*
串口调试工具:picocom putty
使用时需要root权限
picocom
查看帮助:picocom -h
使用方法如:picocom -b 115200 /dev/ttyUSB0
一、设计内容
学习和掌握构建基于嵌入式硬件平台和嵌入式 Linux 软件开发环境的方法,掌握嵌入式音频应用程序设计与开发手段,在此基础上通过 Socket网络编程实现基于嵌入式 IP 网络的双向语音通信。
二、设计要求
1、基本要求
(1)在嵌入式系统环境下,实现本地语音文件录放(WAV格式);
(2)通过 Socket 网络编程实现 IP 网络双向语音传输。
2、扩展要求
通过调用百度、科大讯飞等语音识别库实现简单命令词识别功能,实现语音数据的压缩编码。也可以自行设计其它扩展功能。
三、主要仪器设备
1、嵌入式开发系统 1 套
2、计算机 1 台,安装Ubuntu操作系统及 arm-linux 交叉编译工具
3、耳麦 1 个
4、网线 2 根,IP 地址 2 个
步骤
(一).在嵌入式系统环境下,实现本地语音文件录放(WAV格式)
(1)向arm开发板移植ALSA库
1.下载库文件与工具
alsa-lib-1.0.23.tar.bz2
alsa-utils-1.0.23.tar.bz2
将文件移到Ubuntu上
解压alsa-lib-1.0.23.tar.bz2,进入解压所得目录
2.使用命令
./configure –host=arm-none-linux-gnueabi –prefix=/opt/arm-alsa
–host参数指定了交叉编译器为"arm-none-linux-gnueabi、",
–prefix参数指定了alsa-lib的目标安装目录
3.使用命令
make
sudo make install
安装库
4.解压alsa-utils-1.0.23.tar.bz2,进入解压所得目录
5.使用命令
./configure –host=arm-none-linux-gnueabi –prefix=/opt/arm-alsa –with-alsa-inc-prefix=/opt/arm-alsa/include –with-alsa-prefix=/opt/arm-alsa/lib
–disable-alsamixer –disable-xmlto
其中–with-alsa-inc-prefix和–with-alsa-prefix分别指定了交叉编译util应用所需要的alsa-lib的头文件和库文件;
–disable-alsamixer表示不编译生成alsamixer这个应用程序,
6.使用命令
touch alsaconf/po/t-ja.gmo
touch alsaconf/po/t-ru.gmo
7.使用命令
make
sudo make install
安装完后进入安装目录可看到以下文件
将该目录全部拷贝到/source/rootfs下,移植ALSA库完成。
(2)编辑语音录制与播放程序
一个典型的音频程序应该具有以下结构:打开音频设备、为设备设置读写参数、向音频设备读/写音频数据、关闭设备。Alsa库为我们实现这些操作提供了丰富的接口。
播放程序代码如下:
录制音频程序如下
(3)交叉编译
使用交叉编译工具编译程序
将可执行文件移动到开发板目录下
(4)运行程序
在putty窗口中分别运行音频录制与播放程序
1.通过 Socket 网络编程实现 IP 网络双向语音传输
socket通信其实是有两种方式:TCP和UDP过程。
基于TCP的socket通信服务端的具体步骤:(1)创建ServerSocket对象,绑定监听端口。(2)通过accept()方法监听客户端请求(3)连接建立后,通过输入流读取客户端的数据(4)通过输出流,向客户端回应信息
基于TCP的socket通信客户端的步骤:(1)创建Socket并指定端口(2)通过输出流向服务端发送一个请求(3)等待服务端的回应 获取输入流,读取客户端信息(将字节流转化为字符流),并保存在缓冲区中(4)关闭资源
- 编写服务端** 程序**
编写客户端程序
- 编译
编译服务端程序,将客户端程序进行交叉编译后移植到开发板上
4.** 运行程序**
查看IP
打开服务器
在开发板中运行客户端,ip地址为服务器地址
程序执行,客户端向服务器发送音频数据。之后可以看到服务器端收到了音频数据,并保存到本地。
五、总结
在嵌入式系统环境下,实现本地语音文件录放,通过 Socket 网络编程实现 IP 网络双向语音传输。本地语音文件录放的实现首先是先将alsa库通过交叉编译后移植到开发板上,接着通过调用alsa库的函数来实现录制与播放声音程序的编写,程序编写完后,通过交叉编译生成在开发板上的可执行文件。IP 网络双向语音传输实现是通过socket编程将录制的音频数据通过网络传输给对方,将数据保存后即可播放。